package com.zhugang.week01;

/**
 * @program algorithms
 * @description: strToInt
 * @author: chanzhugang
 * @create: 2022/03/24 07:57
 */
public class StrToInt {

    /**
     * 字符串转整数,注意范围越界处理
     */
    public int strToInt(String str) {
        char[] chars = str.toCharArray();
        int n = chars.length;
        if (n == 0) return 0;
        // 处理前置空格
        int i = 0;
        while (i < n && chars[i] == ' ') {
            i++;
        }
        // 全部为空格
        if (i == n) return 0;

        // 正负号
        int sign;
        char c = chars[i];
        if (c == '-') {
            sign = -1;
            i++;
        } else {
            sign = 1;
            i++;
        }
        // -2147483648 - 2147483647
        int intAbsHigh = 214748364;
        int result = 0;
        // 真正数字处理
        while (i < n && chars[i] >= '0' && chars[i] <= '9') {
            int d = chars[i] - '0';
            // 越界处理
            if (result > intAbsHigh) {
                if (sign == 1) {
                    return Integer.MAX_VALUE;
                } else {
                    return Integer.MIN_VALUE;
                }
            }
            if (result == intAbsHigh) {
                if (sign == 1 && d > 7) {
                    return Integer.MAX_VALUE;
                }
                if (sign == -1 && d > 8) {
                    return Integer.MIN_VALUE;
                }
            }
            result = result * 10 + d;
            i++;
        }
        return sign * result;
    }


}